home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / morec.arc / MORE-C.DOC next >
Encoding:
Text File  |  1985-11-21  |  29.3 KB  |  819 lines

  1.  
  2.            ============   ========   =======   =========          =========    
  3.           ==   ==   ==   ==    ==   ==   ==   ==                 ==           
  4.          ==   ==   ==   ==    ==   =======   ========   =====   ==       
  5.         ==   ==   ==   ==    ==   ==   ==   ==                 ==       
  6.        ==   ==   ==   ========   ==    ==  ========           =========
  7.                     
  8.  
  9.                    =========================================== 
  10.                     \                                       /
  11.                      \                                     /
  12.                  -----               MORE-C              -----   
  13.               / |               Library Routines               | \
  14.              /  |               By Bill Thousand               |  \
  15.          ----   |                                              |   ----
  16.        / |      |                 Version 1.1                  |      | \
  17.        \ |      |                                              |      | /
  18.          ----   |              November 16, 1985               |   ----
  19.              \  |                                              |  /
  20.               \ |       (C) Copyright 1985, Bill Thousand      | /
  21.                  -----          All Rights Reserved       -----
  22.                      /                                     \
  23.                     /                                       \
  24.                    ===========================================
  25.                     
  26.  
  27.              
  28.              =======================================================
  29.              |  This program is distributed under the concept of   |
  30.              |  PUBLIC DOMAIN SOFTWARE. Please show your support   |
  31.              |  for the author by registering this product.        |
  32.              =======================================================
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.                     ========================================
  42.                                  Bill Thousand 
  43.                                5585 Riveredge Rd.
  44.                               Waunakee, Wis. 53597
  45.                                  (608) 849-5038 
  46.          
  47.          
  48.          
  49.                 
  50.          What you have :
  51.          ===============
  52.  
  53.                 The MORE-C routines should be distributed in library 
  54.          form, using ARC or LU/SQ. The library or archieve should 
  55.          include the following :
  56.  
  57.           MORE-C.LIB     .... The main functions library
  58.           MORE-C.DOC     .... This documentation
  59.           RDCHAR2.OBJ   .... Replacement for rdchar w/ status line
  60.           MORE-C.H       .... #include file for use with MORE-C
  61.          
  62.  
  63.          Introduction : 
  64.          ==============
  65.  
  66.  
  67.                 MORE-C is a library of common and  very  useful  'C' 
  68.          functions  that  can  be used in almost any application.  The 
  69.          only area not supported by MORE-C is graphics.  
  70.  
  71.                 The base of the entire MORE-C library is the display 
  72.          function which puts strings on the  screen  aprox.  39  times 
  73.          faster  than  "printf".  This  function makes the application 
  74.          look crisper and more professional,  since a full screen  of 
  75.          data appears almost instantly.  
  76.  
  77.                 The  More  'C'  library is being distributed under the 
  78.          User-Supported Concept.  You are asked to make a donation  if 
  79.          you  use  the  routines  in any capacity.  See the section on 
  80.          "Registration" for more information.  
  81.  
  82.  
  83.          
  84.          Short History :
  85.          ===============
  86.  
  87.                 Almost all the functions in the MORE-C library  were 
  88.          written  separately and with no intent on being used together.  
  89.          This is the first PUBLIC release of the MORE-C  library.  I 
  90.          have been using it for some time and now feel that the 
  91.          functions are ready for release (The biggest part of deciding
  92.          to release the the routines depended on finding time to write 
  93.          this manual).  
  94.  
  95.                 I am constantly making updates,  and after substantial 
  96.          changes  I  will  send  a new version to the registered users 
  97.          (See the section on "Registration"). 
  98.          
  99.  
  100.          
  101.  
  102.  
  103.  
  104.          Errors and Illegal Parameters :
  105.          ===============================
  106.  
  107.                 In  writing  the  functions that make up MORE-C,  I 
  108.          made  no  attempt  to  trap  errors  or  illegal  parameters.  
  109.          Therefore,  the function will attempt to act on any parameters 
  110.          you send it. Example :Telling the menu function that it has 0 
  111.          items could produce  strange  results.  Also,  currently  the 
  112.          MORE-C library  does  not  contain  any  file  in/output 
  113.          routines,  so,  most of the general errors are not because of 
  114.          the MORE-C functions,  but, if errors do occur the MORE-C 
  115.          functions will not acknowledge them and could  screw  up  the 
  116.          system.  
  117.  
  118.  
  119.          
  120.          Requirements :
  121.          ==============
  122.                   
  123.                 The  MORE-C library  functions  were written to be 
  124.          compatible with the IBM-PC or Compaq. The functions should be 
  125.          compatible with any IBM-PC Compatible, but,  I have no way of 
  126.          test them all out.  
  127.  
  128.                 I  wrote  the  routines  using  the  new Microsoft 'C' 
  129.          Compiler version 3.0.  This compiler is definitely required if 
  130.          you are planning to order the source and modify it,  but,  as 
  131.          for actually using the library with other compilers, I really 
  132.          don't know.  One thing that can be  noted  is  that  to  most 
  133.          compilers  the functions will all have a preceding underscore 
  134.          character (The Microsoft compiler  automatically  assumes  an 
  135.          underscore preceding every function) EX:  The manual will say 
  136.          the function is called "purcur(xx,xx)" but, to most compilers 
  137.          (not  Microsoft  3.0)  this  will   really   be   stated   as 
  138.          "_putcur(xx,xx)".  
  139.  
  140.          The requirements for MORE-C are as follows :
  141.  
  142.                 IBM-PC or Compatible
  143.                 128K RAM 
  144.                 Microsoft 'C' Compiler Version 3.0 
  145.          
  146.          
  147.          
  148.                  
  149.          The Functions :
  150.          ===============
  151.  
  152.                 Ok, now for the good part. The following is a list and 
  153.          brief description of all the functions in the library : 
  154.  
  155.          getln ...... Gets a line of text from the user w/full editing
  156.          pause ...... Prompts user to hit any key to continue
  157.          yes_no ..... Prompts user for Yes or No answer
  158.          rdchar ..... Gets a character and scan code from the keyboard
  159.          drawbox .... Draws a window like box on the screen
  160.          logo ....... Displays a logo screen w/Program, author & Ver. & Cpyrt.
  161.          menu ....... Allows great up/down arrow key menus
  162.          get_cur .... Returns the position of the cursor
  163.          putcur ..... Puts the cursor at a specified position
  164.          tone ....... Sounds a short deep tone
  165.          line ....... Draws a single bar line at a specified row
  166.          beep ....... Sounds the normal Ctrl-G bell
  167.          home ....... Clears the screen and returns the cursor to 0,0
  168.          dpl ........ Displays a string on the screen (Very Fast !!)
  169.          dpl_two .... Displays two strings next to each other
  170.          dpli ....... Displays an integer value
  171.          cdpl ....... Centers and displays a string on the screen 
  172.          statalt .... Returns status of the ALT key
  173.          statnum .... Returns numlock status
  174.          statcaps ... Returns capslock status
  175.          statctrl ... Returns status of the CTRL key
  176.          statlshft .. Returns status of the Left shift key
  177.          statrshft .. Returns status of the Right shift key
  178.          changstat .. Quick check on all status indicators
  179.          
  180.          videotype .. Determine Display Type    
  181.                       - This must be the first MORE-C function 
  182.                         called in the program.
  183.  
  184.          MORE-C.H ... Must be #included in the source code of any
  185.                       application using MORE-C
  186.  
  187.          
  188.  
  189.  
  190.          MORE-C.H :
  191.          ==========
  192.  
  193.                 This file must be "#included" in any application using 
  194.          the MORE-C Library. Currently this file does not do much as 
  195.          far as setup, but, it is in my plans to use it more.  In this 
  196.          release this file is so minor it should not be a problem.  
  197.  
  198.                 Please do not change any variables  in  this  file.  As 
  199.          changes occur, I will document anything necessary.  
  200.  
  201.          The following are defined in MORE-C.H :
  202.  
  203.          EOL      '\0'
  204.          SPACE    32
  205.          DEL      127
  206.          CR       13
  207.          LF       10
  208.          BEL      7
  209.          FALSE    0     -| Must not be redefined !!!
  210.          TRUE     1     -|
  211.  
  212.          Videotype :
  213.          ===========
  214.  
  215.                 This  function  must be called before using any of the 
  216.          other MORE-C functions.  See the full  description  on  how 
  217.          to  implement it,  but,  I recommend you use it just 
  218.          after defining your variables in your "main()" function.  
  219.                
  220.                 Also, you must use the variable "video" witch is defined 
  221.          in MORE-C.H !!!! This is very important for correct results.
  222.  
  223.          The Functions :
  224.          ===============
  225.  
  226.                 Now for the functions. Each page will contain the 
  227.          function name, the synopsis, a description, and any notes
  228.          or problems with the routine.
  229.  
  230.          
  231.  
  232. **********************************************************************
  233. *
  234. * name        : videotype
  235. *
  236. * synopsis    : video=videotype();
  237. *
  238. * description : This routine is used by many of the other routines
  239. *               that need to know where the screen memory location
  240. *               begins. This must be the first function used from 
  241. *               this library.
  242. *
  243. * example     : 
  244. *
  245. *             main()
  246. *             {
  247. *                            
  248. *                   video = videotype();
  249. *
  250. *                   . . .
  251. *                   . . . 
  252. *                   . . .
  253. *
  254. *             }
  255. *
  256. * important   : This routine must be run before any others !!!
  257. *
  258. *               Also, the variable "video" is defined in MORE-C.H and
  259. *               must be used as shown in the example.
  260. *
  261. **********************************************************************
  262.  
  263.  
  264. **********************************************************************
  265. *
  266. * name        : home
  267. *
  268. * synopsis    : home();
  269. *
  270. * description : This routine clears the screen and puts the cursor at 
  271. *               position ( 0,0 ).
  272. *
  273. **********************************************************************
  274.  
  275.  
  276.       
  277. **********************************************************************
  278. *
  279. * name        : getln
  280. *
  281. * synopsis    : getln(buff,maxlen,row,col,atr,dflt) 
  282. *               char buff[];    /* Array to put text into          */
  283. *               int maxlen;     /* Length of line to return        */
  284. *               int row,col;    /* Location on screen for input    */
  285. *               char dflt[];    /* Default Data (can be NULL)      */ 
  286. *               int atr;        /* Screen Attribute */
  287. *
  288. * description : This function gets a line of text from the user with 
  289. *               full editing and a limit of specified length.
  290. *
  291. * notes       : Editing features are :
  292. *
  293. *               Right Arrow   - Move one space right (wraps around)
  294. *               Left Arrow    - Move one space left
  295. *               Ctrl-Rt Arrow - Move one word right
  296. *               Ctrl-Lt Arrow - Move one word left
  297. *               
  298. *               Also - Space, backspace, return, Insert, & Delete
  299. *
  300. *               This function will return the scan code of any 
  301. *               extended keys pressed (F1,F2,Alt-F1,Alt-F2)
  302. *
  303. *               The default string must be NULL ( 0x00 ) terminated !!!  
  304. *
  305. * extra       : The following variables, defined in MORE-C.H, can be used 
  306. *               with getln :  ( >> is default )
  307. *     
  308. *               eol_pause  -  >>TRUE:  Requires the user to hit return at the  
  309. *                                      of the input line
  310. *                               FALSE: Automatically returns when field is full
  311. *
  312. *               dots       - >>TRUE:  Fills input space with dots ( . ) 
  313. *                              FALSE: Fills input space with spaces
  314. *
  315. *               num_only   -   TRUE:  Only allows Numbers to be entered
  316. *                            >>FALSE: Allows all letters & numbers
  317. *
  318. *               upper_case -   TRUE:  Converts input to all upper case
  319. *                            >>FALSE: Allows both upper and lower case
  320. *
  321. **********************************************************************
  322.  
  323.  
  324. **********************************************************************
  325. *
  326. * name        : pause
  327. * synopsis    : pause(line);
  328. *               int line;
  329. *
  330. * description : This function centers a "Hit any key to Continue" 
  331. *               message on the specified line and waits for a keypress
  332. *
  333. **********************************************************************
  334.  
  335.  
  336.  
  337.  
  338. **********************************************************************
  339. *
  340. * name        : yes_no
  341. *
  342. * synopsis    : yes_no(row,col);
  343. *               int row,col;
  344. *
  345. * description : This function puts the cursor at "row,col" and waits
  346. *               for "YyNn" from the user. It returns a 1 if YES and
  347. *               2 for no.
  348. *
  349. ********************************************************************** 
  350.  
  351.  
  352. **********************************************************************
  353. *
  354. * name        : rdchar
  355. *
  356. * synopsis    : rdchar(&scan,&asci);
  357. *
  358. * description : This routine waits for the user to press a key and
  359. *               then inserts the values in the given variables.
  360. *
  361. * example     : 
  362. *             main()
  363. *             {
  364. *             short scan,asci;
  365. *
  366. *             rdchar(&scan,&asci);
  367. *
  368. *             }
  369. *
  370. *             This example gets a keystroke from the user and puts the
  371. *             scan code and ascii value in the variables "scan" & "asci".
  372. *
  373. **********************************************************************
  374.  
  375.  
  376. **********************************************************************
  377. *
  378. * name        : menu
  379. * synopsis    : menu(row,col,itms);
  380. *               int row,col;
  381. *               int itms;     /* Number of items in the menu */
  382. *
  383. * description : This routine creates menus and gets a selection from 
  384. *               the user.
  385. *
  386. *                This function returns the item that was selected 
  387. *                on a scale from 1 to "itms".
  388. *
  389. * notes       : Positioning :
  390. *               row = top row
  391. *               row+itms-1 = last or bottom row
  392. *               col = position of solid vertical bar. To the left of
  393. *                     the bar, the user moves the pointer up & down.
  394. *                     So, "col" must not be less than 3.
  395. *           
  396. *               This routine is directed at situations in which you 
  397. *               would want to take a list of item (such as file names)
  398. *               that will vary from time to time and create a menu.
  399. *               I would not recommend this routine for a main menu or 
  400. *               function selection routine because it's so generic looking.
  401. *
  402. * future 
  403. *    outlook  : Currently changing the routine to return function keys 
  404. *               pressed during selection.
  405. *
  406. *
  407. **********************************************************************
  408.  
  409.  
  410. **********************************************************************
  411. *
  412. * name        : dpl
  413. *
  414. * synopsis    : dpl(string,row,col,attr);
  415. *               char string[xx];  /* string less than 80 cols */
  416. *               int row,col,attr;
  417. *
  418. * description : This routine uses the new Microsoft 'C' 3.0 
  419. *               "movedata" function to move the string directly to the 
  420. *               screen memory area. 
  421. *
  422. * notes       : Even if you don't see anything else in this library
  423. *               that looks useful, it is still worth the slight disk
  424. *               disk space needed to compile with this library for this
  425. *               function alone.
  426. *
  427. *               Because of the fact that the routine does not rely on  
  428. *               DOS or any of it's interrupts to get the string to the
  429. *               screen, this is the absolute fastest way to get data
  430. *               to the screen.
  431. *
  432. * Benchmark   : printf()  (customized for speed)
  433. *               13 seconds to fill entire screen with 0s
  434. *          
  435. *               dpl()
  436. *               .34 seconds to fill entire screen with 0s
  437. *
  438. *               dpl() is approx. 39X faster than printf() customized for speed.
  439. *
  440. * limitations : 
  441. *               Since dpl() moves the string to the screen without going 
  442. *               through DOS, it also moves all characters literally. So,
  443. *               any control characters such as CR LF FF or BS will be 
  444. *               displayed literally and should be stripped off before using
  445. *               dpl().
  446. *
  447. *               dpl has no effect on the cursor. The cursor will be
  448. *               in the same position on the screen no matter where you 
  449. *               put the string.
  450. *
  451. *               Also, there is no screen location pointer. You must specify
  452. *               the row and column (from 0 to 24 and from 0 to 79) each
  453. *               time you call the routine. It will not scroll the screen
  454. *               up at when a string is placed at the bottom.
  455. *           
  456. ********************************************************************** 
  457.  
  458.  
  459. **********************************************************************
  460. *
  461. * name        : cdpl
  462. *
  463. * synopsis    : cdpl(string,row,attr);
  464. *               char string[xx];  /* must be less than 80 */
  465. *               int row,att;
  466. *
  467. * description : This routine uses dpl, but, will automatically calculate
  468. *               the column required to center the string on an 80 col screen.
  469. *
  470. **********************************************************************
  471.  
  472.  
  473. **********************************************************************
  474. *
  475. * name        : dpli
  476. *
  477. * synopsis    : dpli(integer,row,col,attr);
  478. *               int integer,row,col,attr;
  479. *
  480. * description : This routine uses dpl() to put a integer on the screen
  481. *
  482. ********************************************************************** 
  483.  
  484.  
  485. **********************************************************************
  486. *
  487. * name        : dpl_two
  488. *
  489. * synopsis    : dpl_two(string1,string2,row,col,attr);
  490. *               char string1[xx],string2[xx];
  491. *               int row,col,attr;
  492. *
  493. * description : This function uses dpl to put two strings on the screen.
  494. *               the location for "string2" will be automatically calculated
  495. *               to be one space to the right of "string1".
  496. *
  497. **********************************************************************
  498.  
  499.  
  500.  
  501. **********************************************************************
  502. *
  503. * name        : box_1
  504. *
  505. * synopsis    : box_1(trow,tcol,vlen,hlen,attr);
  506. *               int trow,tcol;    /* Top corner of box */
  507. *               int vlen,hlen;    /* Width and height of box */
  508. *               int attr;         /* Screen attribute for box */
  509. *
  510. * description : This routine uses dpl() to produce a nice looking box
  511. *               with IBM Extended character set on the screen almost
  512. *               instantaneously.
  513. *
  514. **********************************************************************
  515.  
  516.  
  517. **********************************************************************
  518. *
  519. * name        : logo
  520. *
  521. * synopsis    : logo(titl,author,version,cprt);
  522. *               char titl[xx];      /* Title of the program */
  523. *               char author[xx];    /* Author "  "     "    */
  524. *               char version[xx];   /* Version or release   */
  525. *               char cprt[xx];      /* Copyright notice     */
  526. *
  527. * description : This routine prints an attractive logo for any program.
  528. *
  529. *               The strings are placed on the screen literally. So, for
  530. *               example :
  531. *               Author would be -   strcpy(author,"By John Doe");
  532. *
  533. *               Version would be -  strcpy(version,"Version 4.12");
  534. *               and the Copyright notice might be set by -
  535. *                           strcpy(cprt,"(C) Copyright 1985, John Doe"); 
  536. *
  537. * notes       : This routine does not pause or wait for a keystroke, but,
  538. *               returns immediately after displaying the logo.
  539. *
  540. **********************************************************************
  541.  
  542.  
  543.  
  544. **********************************************************************
  545. *
  546. * name        : line
  547. *
  548. * synopsis    : line(row);
  549. *               int row;
  550. *
  551. * description : This routine puts a line on the screen using dpl() and
  552. *               ASCII character 196.
  553. *
  554. **********************************************************************
  555.  
  556.  
  557. **********************************************************************
  558. *
  559. * name        : beep
  560. *
  561. * synopsis    : beep();
  562. *
  563. * description : This routine moves the cursor off the screen and 
  564. *               uses printf() to print a character 07 wich causes
  565. *               a standard beep.
  566. *
  567. * important   : This routine does re-locate the cursor and does NOT
  568. *               return it to it's original position.
  569. *
  570. **********************************************************************
  571.  
  572.  
  573. **********************************************************************
  574. *
  575. * name        : tone
  576. *
  577. * synopsis    : tone();
  578. *
  579. * description : This function sounds a dull low sound from the PC's speaker.
  580. *
  581. * notes       : Unlike beep(), this routine does not move the cursor.
  582. *
  583. **********************************************************************
  584.  
  585.  
  586. **********************************************************************
  587. *
  588. * name        : putcur
  589. *
  590. * synopsis    : putcur(row,col);
  591. *               int row,col;
  592. *
  593. * description : This routine move the cursor to the specified location
  594. *
  595. **********************************************************************
  596.  
  597.  
  598. **********************************************************************
  599. *
  600. * name        : getcur 
  601. *
  602. * synopsis    : getcur(&row,&col);
  603. *
  604. * description : This routine puts the current cursor location into 
  605. *               the specified variables "row" and "col"
  606. *
  607. * example     :
  608. *               main()
  609. *               {
  610. *               int row,col
  611. *               getcur(&row,&col);
  612. *               
  613. *               }
  614. *              The variables "row" and "col" now contain the current cursor
  615. *              position.
  616. *
  617. **********************************************************************
  618.  
  619.  
  620. **********************************************************************
  621. *
  622. * name        : stat???? (alt,lshft,rshft,ctrl,num,caps)
  623. *
  624. * synopsis    : stat????();
  625. *
  626. * description : These routines check the status of the specifed key or
  627. *               indicator and returns a TRUE value if the key is on or
  628. *               FALSE if it is off.
  629. *
  630. * notes       : See the section on the new RDCHAR for more info
  631. *
  632. **********************************************************************
  633.  
  634.  
  635. **********************************************************************
  636. *
  637. * name        : changstat
  638. *
  639. * synopsis    : changstat();
  640. *
  641. * description : This routine checks the status of all the shift, ctrl,
  642. *               numlock, alt, and capslock keys and toggles lights on
  643. *               and off in cols 40-80 on the bottom line on the screen.
  644. *
  645. **********************************************************************
  646.  
  647.         
  648.          
  649.  
  650.          Using the alternate RDCHAR :
  651.          ============================
  652.  
  653.               I have included an alternate rdchar() function for those
  654.          who want the status indicators, but, are not ordering the
  655.          source code. 
  656.  
  657.               When "RDCHAR2.OBJ" is added to the library, you will
  658.          be giving up the bottom line on the screen, for the alternate
  659.          routine uses changstat to constantly update the status. Also, 
  660.          the new routine will put the time and date (updating time) in
  661.          the bottom left corner of the screen. 
  662.  
  663.               Normally putting all the status indicators (such as the 
  664.          shift, ctrl, and alt) would cause slower data entry. In this
  665.          routine, I use dpl for everything, and it does not try  to
  666.          update the time while a key is being pressed. It works out
  667.          extremly well, I have not noticed any speed decrease while
  668.          using it.
  669.          
  670.               To implement the alternate routine, rename "RDCHAR2.OBJ"
  671.          as "RDCHAR.OBJ". Then use "LIB" (If you do not have the new 
  672.          MS LIB, please make a note on the registration form for me to
  673.          do it for you.) to replace the existing "RDCHAR.OBJ" with 
  674.          the new one.
  675.  
  676.              Once installed, this will also be the routine used by
  677.          getln().
  678.  
  679.  
  680.          Source Code Available :
  681.          =======================
  682.  
  683.               The source code for the MORE-C routines is available, 
  684.          see the section on registration for more information.
  685.          
  686.               If you do obtain the source code, please do not 
  687.          re-distribute any modified version of the routines. If you
  688.          make modifications, please send them to me first. I will 
  689.          check to make sure the changes will work with anything I 
  690.          might do or have done as far as my own modifications.  
  691.          
  692.  
  693.          COPYRIGHT :
  694.          ===========
  695.  
  696.               These routines are copyright 1985 by Bill Thousand. 
  697.          All rights reserved. You are granted a limited license to
  698.          distribute these routines un-modified, in library form
  699.          only (Source code distribution is prohibited), and only 
  700.          on diskettes. (Distribution of hard copies of the 
  701.          Documentation or Source Code is also prohibited). 
  702.  
  703.               If you use these routines on a regular basis, please
  704.          show your support by registering. Commercial use by non-
  705.          registered users is prohibited.
  706.  
  707.  
  708.          Support :
  709.          =========
  710.  
  711.               All user's can call for info. Only registered users will
  712.          be allowed to get technical support.
  713.  
  714.               Call - (608)-849-5038
  715.  
  716.  
  717.          Registration :
  718.          ==============
  719.  
  720.          General Advantages to registered users :
  721.  
  722.          - Allowed to use the routines for commercial applications
  723.          - Notification of updates
  724.          - Printed/bound User's manual (Fancy Font formated)
  725.          - Discount on all other products by the author
  726.          - Supporting the Concept of PUBLIC DOMAIN SOFTWARE
  727.  
  728.          - When you register, I will send you a new diskette version of
  729.            this manual. On this new version's registration form, you will
  730.            find your personal registration number. This is the version of 
  731.            the manual that you distribute to your friends or user's groups.
  732.            Whenever anyone sends me a registration form with your number on
  733.            it, you will receive a check for $5.00.
  734.  
  735.          There exists three types of registration for the MORE-C routines.
  736.          They are a follows :
  737.  
  738.          #1
  739.          ----------
  740.           $20.00 - You are sent a printed/bound copy of the user's manual
  741.                    and notified when major modifications have been made.
  742.                    Can receive updates for the cost of the diskettes.
  743.  
  744.          #2
  745.          ----------
  746.           $30.00 - You are sent a printed/bound copy of the user's manual
  747.                    and automatically sent any updates of the library or
  748.                    manual.
  749.  
  750.          #3
  751.          ----------
  752.           $50.00 - You are sent a printed/bound copy of the user's manual,
  753.                    the source code, a hard copy of the source, and any 
  754.                    updates to the library, source, or manual.
  755.  
  756.  
  757.         NOTE: Allow at least 2 to 3 weeks for delivery.
  758.  
  759.  
  760.  
  761.  
  762. -------------------------------------------------------------------------------
  763.                                                                    BT00101
  764. Send to :
  765.         
  766.         Bill Thousand, Programmer
  767.         5585 Riveredge Road
  768.         Waunakee, Wi. 53597
  769.  
  770.  
  771. Check one :               ____   Registration Type #1 @ $20.00
  772.                          
  773.                           ____   Registration Type #2 @ $30.00
  774.  
  775.                           ____   Registration Type #3 @ $50.00
  776.  
  777.  
  778. Name  ________________________________________________________         
  779.  
  780. Address  _____________________________________________________
  781.  
  782. City  ____________________________________   State  __________
  783.  
  784. Zip _____________         Phone  ( _____ ) ______ - __________
  785.  
  786.  
  787.  
  788. Comments :  __________________________________________________
  789.  
  790.             __________________________________________________
  791.  
  792.             __________________________________________________
  793.  
  794.  
  795. Other 'C' routines you would like to see :
  796.  
  797.            ___________________________________________________
  798.  
  799.            ___________________________________________________
  800.  
  801.            ___________________________________________________
  802.  
  803.  
  804. -------------------------------------------------------------------------------
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.